package com.cc.pms.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cc.pms.domain.TagType;
import com.cc.pms.mapper.TagTypeMapper;
import com.cc.common.core.domain.R;
import com.cc.common.core.page.PageQuery;
import com.cc.common.core.page.PageVo;
import com.cc.pms.service.ITagTypeService;
import org.springframework.stereotype.Service;

import java.util.Arrays;

/**
 * <p>
 * 标签类型 服务实现类
 * </p>
 *
 * @author corleone
 * @since 2025-04-19
 */
@Service
public class TagTypeServiceImpl extends ServiceImpl<TagTypeMapper, TagType> implements ITagTypeService {



    @Override
    public PageVo<TagType> pageVo(TagType tagType, PageQuery query) {
        IPage<TagType> page = new Page<>(query.getPageNum(), query.getPageSize());
        LambdaQueryWrapper<TagType> lqw = Wrappers.lambdaQuery();
        if (tagType != null) {
            if (tagType.getName() != null && !tagType.getName().isEmpty()) {
                lqw.like(TagType::getName, tagType.getName());
            }
            // 可以根据需要添加更多条件
        }
        IPage<TagType> tagTypeIPage = baseMapper.selectPage(page, lqw);
        // 将 MyBatis-Plus 的分页结果转换为通用的 PageVo
        return PageVo.of(tagTypeIPage.getRecords() , tagTypeIPage.getTotal());
    }

    @Override
    public R<Long> create(TagType tagType) {
        if (tagType == null || tagType.getName() == null || tagType.getName().trim().isEmpty()) {
            return R.fail(-1, "请求数据错误");
        }
        if (baseMapper.selectCount(Wrappers.<TagType>lambdaQuery().eq(TagType::getName, tagType.getName())) > 0) {
            return R.fail(-1, "标签类型名称已存在");
        }
        save(tagType);
        return R.ok(tagType.getId());
    }

    @Override
    public R<Boolean> update(TagType tagType) {
        if (!tagType.getName().equals(baseMapper.selectById(tagType.getId()).getName()) &&
                baseMapper.selectCount(Wrappers.<TagType>lambdaQuery().eq(TagType::getName, tagType.getName()).ne(tagType.getId() != null , TagType::getId , tagType.getId())) > 0) {
            return R.fail(-1, "标签类型名称已存在");
        }
        return R.ok(updateById(tagType));
    }

    @Override
    public R<Boolean> delete(Long[] ids) {
        if (ids == null || ids.length == 0) {
            return R.fail(-1 , "请求数据为空");
        }
        return R.ok(removeByIds(Arrays.asList(ids)));
    }

    @Override
    public TagType getById(Long id) {
        if (id == null) {
            return null;
        }
        return baseMapper.selectById(id);
    }
}
